イベントログ出力を条件にタスクスケジューラを利用してEC2インスタンスを停止してみた

イベントログ出力を条件にタスクスケジューラを利用してEC2インスタンスを停止してみた

Clock Icon2024.07.22

こんにちは。テクニカルサポートチームのShiinaです。

はじめに

日頃から Windows の EC2 インスタンスを運用を行っており、このイベントログメッセージが出力された時にインスタンスを停止できたらいいなぁと思ったことはありませんか?
今回は Windows のタスクスケジューラを利用して特定のイベントログ出力を条件に EC2 インスタンスを停止する方法についてご紹介します。

タスクスケジューラのタスク設定

1)タスクスケジューラを起動します。

2)タスクスケジューラライブラリで「タスクの作成」を選択します。
1

3)全般タブで任意の名前を入力し、「ユーザーがログオンしているかどうかにかかわらず実行する」と「最上位の特権で実行する」にチェックを入れます。
11

4)Administratorのパスワードを求められるため、パスワードを入力します。
11-1

5)トリガータブで新規ボタンを選択し、タスクの開始を「イベント時」とした条件を指定します。
実際にEC2 インスタンスを停止させる条件となるイベントログメッセージのログ、ソース、イベントIDを指定してください。

今回は次の条件としました。

  • ログ:Application
  • ソース:DailyBatch
  • イベント ID:1001
    3

6)操作タブで新規ボタンを選択し、操作で「プログラムの開始」を指定し、次の設定を行います。

  • プログラム/スクリプト:%systemroot%\system32\shutdown.exe
  • 引数の追加:/s /f
    13

7)OKボタンを選択し、タスク作成を行います。

やってみた

PowerShell より Write-EventLog コマンドを利用して擬似イベントログの出力を行います。

Write-EventLog -LogName "Application" -Source "DailyBatch" -EventID 1001 -EntryType Information -Message "Daily Batch processing has been successfully completed." 

7
サインアウトしようとしていますの表示が出ました。
6
EC2 のコンソールからステータスを見てみます。
5
停止済みとなったことを確認できました。

まとめ

タスクスケジューラを利用して特定のイベントログ出力を条件に EC2 インスタンスを停止する方法を紹介しました。

次のようなユースケースに利用できると思います。

  • バッチ処理用途のインスタンスである。
  • バッチ処理終了時に決まったイベントログが出力される。
  • 毎日ワークロードが変動するため、バッチ処理終了時刻がまちまち。

さらにバッチ処理開始時刻にあわせてインスタンスの起動を EventBridge スケジューラで実施させる といった組み合わせを行うことで起動〜停止までを自動化できます。
稼働時間は必要最小限となり、コスト削減が行えます!
EventBridge スケジューラを使った EC2 の定期起動については下記ブログを参照ください。

https://dev.classmethod.jp/articles/ec2-schedule-using-eventbridge-scheduler/

最後までご覧いただきありがとうございました。
本記事が誰かのお役に立てれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.